From e548c7139496067dca2757124963e62ce115b4d1 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Mon, 10 Aug 2015 15:35:56 -0300 Subject: [PATCH] placesview: show Disconnect instead of Eject Since we're dealing with networks, terms like "Eject" or the eject button are misleading, since we're not actually ejecting but disconnecting. Fix that by showing the appropriate icon and tooltip. --- gtk/gtkplacesview.c | 8 +++++-- gtk/gtkplacesviewrow.c | 43 +++++++++++++++++++++++++++++++++++ gtk/gtkplacesviewrowprivate.h | 5 ++++ gtk/ui/gtkplacesviewrow.ui | 2 +- 4 files changed, 55 insertions(+), 3 deletions(-) diff --git a/gtk/gtkplacesview.c b/gtk/gtkplacesview.c index ca02fe04b5..3721be71bf 100644 --- a/gtk/gtkplacesview.c +++ b/gtk/gtkplacesview.c @@ -701,6 +701,7 @@ add_volume (GtkPlacesView *view, "volume", volume, "mount", mount, "file", NULL, + "is-network", is_network, NULL); insert_row (view, row, is_network); @@ -748,6 +749,7 @@ add_mount (GtkPlacesView *view, "volume", NULL, "mount", mount, "file", NULL, + "is-network", is_network, NULL); insert_row (view, row, is_network); @@ -1314,10 +1316,12 @@ build_popup_menu (GtkPlacesView *view, GtkWidget *item; GMount *mount; GFile *file; + gboolean is_network; priv = gtk_places_view_get_instance_private (view); mount = gtk_places_view_row_get_mount (row); file = gtk_places_view_row_get_file (row); + is_network = gtk_places_view_row_get_is_network (row); priv->popup_menu = gtk_menu_new (); gtk_style_context_add_class (gtk_widget_get_style_context (priv->popup_menu), @@ -1373,7 +1377,7 @@ build_popup_menu (GtkPlacesView *view, /* Mount/Unmount items */ if (mount) { - item = gtk_menu_item_new_with_mnemonic (_("_Unmount")); + item = gtk_menu_item_new_with_mnemonic (is_network ? P_("_Disconnect") : P_("_Unmount")); g_signal_connect (item, "activate", G_CALLBACK (unmount_cb), @@ -1383,7 +1387,7 @@ build_popup_menu (GtkPlacesView *view, } else { - item = gtk_menu_item_new_with_mnemonic (_("_Mount")); + item = gtk_menu_item_new_with_mnemonic (is_network ? P_("_Connect") : P_("_Mount")); g_signal_connect (item, "activate", G_CALLBACK (mount_cb), diff --git a/gtk/gtkplacesviewrow.c b/gtk/gtkplacesviewrow.c index 641399f709..3e66398e29 100644 --- a/gtk/gtkplacesviewrow.c +++ b/gtk/gtkplacesviewrow.c @@ -31,6 +31,7 @@ struct _GtkPlacesViewRow GtkSpinner *busy_spinner; GtkButton *eject_button; + GtkImage *eject_icon; GtkEventBox *event_box; GtkImage *icon_image; GtkLabel *name_label; @@ -39,6 +40,8 @@ struct _GtkPlacesViewRow GVolume *volume; GMount *mount; GFile *file; + + gint is_network : 1; }; G_DEFINE_TYPE (GtkPlacesViewRow, gtk_places_view_row, GTK_TYPE_LIST_BOX_ROW) @@ -51,6 +54,7 @@ enum { PROP_VOLUME, PROP_MOUNT, PROP_FILE, + PROP_IS_NETWORK, LAST_PROP }; @@ -107,6 +111,10 @@ gtk_places_view_row_get_property (GObject *object, g_value_set_object (value, self->file); break; + case PROP_IS_NETWORK: + g_value_set_boolean (value, self->is_network); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -149,6 +157,10 @@ gtk_places_view_row_set_property (GObject *object, g_set_object (&self->file, g_value_get_object (value)); break; + case PROP_IS_NETWORK: + gtk_places_view_row_set_is_network (self, g_value_get_boolean (value)); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -206,12 +218,20 @@ gtk_places_view_row_class_init (GtkPlacesViewRowClass *klass) G_TYPE_FILE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); + properties[PROP_IS_NETWORK] = + g_param_spec_boolean ("is-network", + P_("Whether the row represents a network location"), + P_("Whether the row represents a network location"), + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_properties (object_class, LAST_PROP, properties); gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/ui/gtkplacesviewrow.ui"); gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, busy_spinner); gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, eject_button); + gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, eject_icon); gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, event_box); gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, icon_image); gtk_widget_class_bind_template_child (widget_class, GtkPlacesViewRow, name_label); @@ -282,3 +302,26 @@ gtk_places_view_row_set_busy (GtkPlacesViewRow *row, gtk_widget_set_visible (GTK_WIDGET (row->busy_spinner), is_busy); } + +gboolean +gtk_places_view_row_get_is_network (GtkPlacesViewRow *row) +{ + g_return_val_if_fail (GTK_IS_PLACES_VIEW_ROW (row), FALSE); + + return row->is_network; +} + +void +gtk_places_view_row_set_is_network (GtkPlacesViewRow *row, + gboolean is_network) +{ + if (row->is_network != is_network) + { + row->is_network = is_network; + + gtk_image_set_from_icon_name (row->eject_icon, + is_network ? "network-offline-symbolic" : "media-eject-symbolic", + GTK_ICON_SIZE_BUTTON); + gtk_widget_set_tooltip_text (GTK_WIDGET (row->eject_button), is_network ? P_("Disconnect") : P_("Unmount")); + } +} diff --git a/gtk/gtkplacesviewrowprivate.h b/gtk/gtkplacesviewrowprivate.h index 20add04241..3c46d5d9a5 100644 --- a/gtk/gtkplacesviewrowprivate.h +++ b/gtk/gtkplacesviewrowprivate.h @@ -48,6 +48,11 @@ GFile* gtk_places_view_row_get_file (GtkPlacesViewR void gtk_places_view_row_set_busy (GtkPlacesViewRow *row, gboolean is_busy); +gboolean gtk_places_view_row_get_is_network (GtkPlacesViewRow *row); + +void gtk_places_view_row_set_is_network (GtkPlacesViewRow *row, + gboolean is_network); + G_END_DECLS #endif /* GTK_PLACES_VIEW_ROW_H */ diff --git a/gtk/ui/gtkplacesviewrow.ui b/gtk/ui/gtkplacesviewrow.ui index c46079bbcf..d1e923b191 100644 --- a/gtk/ui/gtkplacesviewrow.ui +++ b/gtk/ui/gtkplacesviewrow.ui @@ -72,7 +72,7 @@ center Unmount - + True media-eject-symbolic 1 -- 2.30.2